1. MPC response overview

As of March 20 2023, a total of 308,467 persons or 64,846 families have been reached by MPC interventions.

A total of USD 9,391,450 has been disbursed by 14 implementing agencies across 22 sub-districts.

Only beneficiaries who have received at least USD 100/family/month have been included. Additionally, current achievement reporting has yet to include the collective sites, only information on communities, so it is not clear to what extent needs have been met in these centres. This will be corrected in revised 4W template.





2. Map of MPC beneficiaries and collective/reception centres


Data on cash response extracted from FSL earthquake tracker on March 17 2023. Data on collective centres extracted from March 15 2023.

Locations of beneficiaries have been estimated – the FSL dataset does not call for the input of geocoordinates. Instead, the blue circles are situated at the centroids for communities/villages, as recorded in the OCHA geodamins reference dataset.

This means that we do not have an accurate record of which centres have received which activities. This underscores the importance of including of codifying and including each of the temporary sites so that we may track the progress of the response and identify any gaps in coverage that arise. Temporary sites have been included in the revised 4Ws.



3. Geographic breakdown of beneficiaries

Coverage is highest in Afrin and Harim districts – substantially so.



The current distribution of beneficiaries, at least at district level, is commonsensical. Harim and Afrin do have a much larger share of the earthqauke impacts. Bear in mind that the figures below only pertain to populations within the AOC of Northwest Syria and not all parts of each district are included.


When reviewing the district-level spread of casualties and totally- and partially-damaged houses, Harim and Afrin do stand out in terms of the magnitude of the damage, though it should be noted that the share of damaged houses in Afrin is much higher than in Harim.

Following them, Jebel Saman and Jisr-ash-Shugur have the next most severe damage, though, as can be seen from the table below, their populations (within the area of control) are comparatively smaller.

Assessments are still ongoing and the CWG will update these tables when new data becomes available.



Though the earthquake damage is not as severe in A’zaz, Al Bab, Jarablus, Idleb and Jisr-ash-Shugur, a much higher proportion of needs in these areas remain unmet, given the low percentages of persons reached.

The establishment of subnational targets at the district and sub-district level, will go some way towards clarifying how resources should be allocated across the affected areas.



3.1 Breakdown by partner and district

Harim, by far and away has the highest concentration of partners (12), double that of the next highest district (Afrin).




3.2 Scatterplot of sub-districts

The plot below shows the total population of each sub-district on the x-axis (for the moment, all persons in these areas are assumed to be affected and are included in the PIN) and the number of beneficiaries on the y-axis.

The size of each point indicates the number of dead or wounded persons there per 100,000.



Overall, we see fair alignment between the magnitude of the needs (total population) and the number of beneficiaries – this is evidenced by the blue line showing a positive relationship.

However, we do note several mismatches – Dana seems to have received an outsized share of beneficiaries, especially when considering the casualty rate. And Kafr Takharim seems to have been allocated relatively fewer resources in comparison to the death toll there.




4. Cash response actors and cash disbursed

In the scatterplot below, each point is a single cash working group partner. The x-axis indicates the number of beneficiaries reached per agency and the y-axis indicates the number of communities (admin4) reached.



USD 9,391,450 has been distributed across 111 communities and 22 sub-districts in NW Syria.

The table below summarises the information in the scatterplot above in tabular form:




4.1 USD disbursed by partner

There is very good compliance with CWG standards on the transfer values of multipurpose cash interventions, as can be seen by the usd_per_fam column in the table below.



Broadening the scope to look at all cash-based activities, not just MPC, it is still observed that more that 3/4 of all beneficiary households have received a USD 150 payment, with about 10% receiving USD 50.

This may necessitate splitting the Cash Response activity into a full-ration and half/quarter ration activities.





5. UNHCR site tracker – searchable table

Data from UNHCR site tracker. Extracted 20230315.

LS0tDQp0aXRsZTogIk5vcnRod2VzdCBTeXJpYSBDYXNoIFdvcmtpbmcgR3JvdXAgRWFydGhxdWFrZSBSZXNwb25zZSBCdWxsZXRpbiINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgdGhlbWU6IHJlYWRhYmxlDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogbm8NCiAgICBjb2xsYXBzZWQ6IG5vDQphbHdheXNfYWxsb3dfaHRtbDogeWVzDQotLS0NCg0KYGBge2NzcywgZWNobz1GQUxTRX0NCg0KI1RPQzo6YmVmb3JlIHsNCiAgY29udGVudDogIiI7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBoZWlnaHQ6IDcwcHg7DQogIG1hcmdpbjogMmVtIDIwcHggNDBweCAyMHB4Ow0KICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoIk5XUy1DV0cgbG9nby5QTkciKTsNCiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOw0KICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOw0KICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KfQ0KYGBgDQoNCmBgYHs9aHRtbH0NCjxzdHlsZT4NCiAgICBib2R5IC5tYWluLWNvbnRhaW5lciB7DQogICAgICAgIG1heC13aWR0aDogMTI4MHB4Ow0KICAgIH0NCjwvc3R5bGU+DQpgYGANCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIGZpZy53aWR0aD05LCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmc9RkFMU0UpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHN0cmluZ2kpDQpsaWJyYXJ5KHBhbmRlcikNCmxpYnJhcnkoamFuaXRvcikNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeShtYWdyaXR0cikNCmxpYnJhcnkodmlyaWRpcykNCmxpYnJhcnkocGF0Y2h3b3JrKQ0KbGlicmFyeShEVCkNCmxpYnJhcnkoc2YpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoZmxleHRhYmxlKQ0KbGlicmFyeShnZ3Jhc3RyKQ0KbGlicmFyeShodG1sd2lkZ2V0cykNCg0KdGhlbWVfc2V0KHRoZW1lX2xpZ2h0KCkpDQoNCiMgZGlzYWJsaW5nIHNjaWVudGlmaWMgbm90YXRpb24NCm9wdGlvbnMoc2NpcGVuID0gMTAwKQ0KDQojIHBhbmRlciB0YWJsZXMgYWxsIGluIG9uZSByb3cNCnBhbmRlck9wdGlvbnMoJ3RhYmxlLnNwbGl0LnRhYmxlJywgSW5mKQ0KDQojIHBhbmRlciB0aG91c2FuZHMgc2VwYXJhdG9yDQpwYW5kZXJPcHRpb25zKCJiaWcubWFyayIsICIsIikNCg0KIyByZXBsYWNlIA0Kb3B0cyA8LSBvcHRpb25zKGtuaXRyLmthYmxlLk5BID0gIiIpDQoNCmAlb3V0JWAgPC0gTmVnYXRlKGAlaW4lYCkNCg0KIyBmdW5jdGlvbiBmb3IgdHJhbnNwb3NpbmcgZGYNCnRyYW5zcG9zZV9kZiA8LSBmdW5jdGlvbihkZikgew0KICB0X2RmIDwtIGRhdGEudGFibGU6OnRyYW5zcG9zZShkZikNCiAgY29sbmFtZXModF9kZikgPC0gcm93bmFtZXMoZGYpDQogIHJvd25hbWVzKHRfZGYpIDwtIGNvbG5hbWVzKGRmKQ0KICB0X2RmIDwtIHRfZGYgJT4lDQogICAgdGliYmxlOjpyb3duYW1lc190b19jb2x1bW4oLmRhdGEgPSAuKSAlPiUNCiAgICB0aWJibGU6OmFzX3RpYmJsZSguKQ0KICByZXR1cm4odF9kZikNCn0NCg0KIyBmdW5jdGlvbiBiZW5lZmljaWFyeSBzdW1tYXJpZXMNCnN1bV9iZW4gPC0gZnVuY3Rpb24oZGYsIGNvbHVtbl92YXIpew0KICANCiAgY29sdW1uX3ZhciA8LSBlbnF1byhjb2x1bW5fdmFyKQ0KICANCiAgZGYgJT4lDQogICAgZ3JvdXBfYnkoISFjb2x1bW5fdmFyKSAlPiUgIyBtdXN0IGFkZCBiYW5nLWJhbmcNCiAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShuZXdfYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICAgIGFycmFuZ2UoZGVzYyhiZW5lZmljaWFyaWVzKSkNCiAgICANCn0NCg0KIyBmdW5jdGlvbiBiZW5lZmljaWFyeSBzdW1tYXJpZXMsIDIgZ3JvdXBlZCB2YXJpYWJsZXMNCnN1bV9iZW4yIDwtIGZ1bmN0aW9uKGRmLCBjb2x1bW5fdmFyMSwgY29sdW1uX3ZhcjIpew0KICANCiAgY29sdW1uX3ZhcjEgPC0gZW5xdW8oY29sdW1uX3ZhcjEpDQogIGNvbHVtbl92YXIyIDwtIGVucXVvKGNvbHVtbl92YXIyKQ0KICANCiAgZGYgJT4lDQogICAgZ3JvdXBfYnkoISFjb2x1bW5fdmFyMSwgISFjb2x1bW5fdmFyMikgJT4lICMgbXVzdCBhZGQgYmFuZy1iYW5nDQogICAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0obmV3X2JlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksIC5ncm91cHMgPSAiZHJvcCIpDQogICAgDQp9DQoNCiMgc2NhbGluZyBmdW5jdGlvbnMgDQpyYW5nZTAxIDwtIGZ1bmN0aW9uKHgpeyh4LW1pbih4KSkvKG1heCh4KS1taW4oeCkpfQ0KcmFuZ2Vfd25hIDwtIGZ1bmN0aW9uKHgpeyh4LW1pbih4LCBuYS5ybSA9IFRSVUUpKS8obWF4KHgsIG5hLnJtID0gVFJVRSktbWluKHgsIG5hLnJtID0gVFJVRSkpfQ0KDQojbW9kZSBmdW5jdGlvbiANCm1vZGUgPC0gZnVuY3Rpb24oeCkgew0KICB1eCA8LSB1bmlxdWUoeCkNCiAgdXhbd2hpY2gubWF4KHRhYnVsYXRlKG1hdGNoKHgsIHV4KSkpXQ0KfQ0KDQpgYGANCg0KYGBge3IgZGF0YX0NCnBjb2RlM19zaGFwZSA8LSANCiAgc3RfcmVhZCgiLi9kYXRhL3N5cl9hZG1ibmRhX3VuY3NfdW5vY2hhXzIwMjAxMjE3L3N5cl9hZG1ibmRhX2FkbTNfdW5jc191bm9jaGFfMjAyMDEyMTcuc2hwIiwgDQogICAgICAgICAgcXVpZXQgPSBUUlVFKQ0KDQpsb2NhdGlvbnMgPC0gcmVhZF9leGNlbCgiLi9kYXRhL0xvY2F0aW9ucy54bHN4IikgJT4lIA0KICBjbGVhbl9uYW1lcygpDQoNCmZzbCA8LSByZWFkX2NzdigiLi9kYXRhL2Zvcl9yZXBvcnQvZnNsLmNzdiIpICU+JSANCiAgbXV0YXRlKHBhcnRuZXJfY29kZSA9IGlmZWxzZShpcy5uYShwYXJ0bmVyX2NvZGUpLCAidGVtcF8xIiwgcGFydG5lcl9jb2RlKSkNCg0Kc2l0ZXMgPC0gcmVhZF9jc3YoIi4vZGF0YS9mb3JfcmVwb3J0L3NpdGVzLmNzdiIpDQoNCnJlbW92ZV9zaXRlcyA8LSByZWFkX2NzdigiLi9kYXRhL2Zvcl9yZXBvcnQvc2l0ZXNfbG9jYXRpb25zX2ZzbC5jc3YiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShsb25naXR1ZGVfeCkgJiAhaXMubmEobGF0aXR1ZGVfeSkpICU+JSANCiAgc3RfYXNfc2YoY29vcmRzID0gYygibG9uZ2l0dWRlX3giLCAibGF0aXR1ZGVfeSIpLCBjcnMgPSA0MzI2KSAlPiUNCiAgc3RfdHJhbnNmb3JtKHN0X2NycyhwY29kZTNfc2hhcGUpKSAlPiUgDQogIG11dGF0ZShpbnRlcnNlY3Rpb24gPSBhcy5pbnRlZ2VyKHN0X2ludGVyc2VjdHMoZ2VvbWV0cnksIHBjb2RlM19zaGFwZSkpLCANCiAgICAgICAgIGFyZWEgPSBpZmVsc2UoaXMubmEoaW50ZXJzZWN0aW9uKSwgIiIsIHBjb2RlM19zaGFwZSRBRE0zX1BDT0RFW2ludGVyc2VjdGlvbl0pKSAlPiUNCiAgZmlsdGVyKGlzLm5hKGludGVyc2VjdGlvbikpIA0KDQpzaXRlc19sb2NhdGlvbnNfZnNsIDwtIHJlYWRfY3N2KCIuL2RhdGEvZm9yX3JlcG9ydC9zaXRlc19sb2NhdGlvbnNfZnNsLmNzdiIpICU+JSANCiAgYW50aV9qb2luKHJlbW92ZV9zaXRlcywgYnkgPSBjKCJzaXRlX25hbWUiKSkNCg0KbmFtZXNfZXEgPC0gYygNCiAgImRhdGUiLA0KICAiZ292ZXJub3JhdGUiLA0KICAiZGlzdHJpY3QiLA0KICAic3ViX2Rpc3RyaWN0IiwNCiAgImNvbW11bml0eSIsDQogICJhZG1pbjQiLA0KICAiY2FzdWFsdGllcyIsDQogICJpbmp1cmllcyIsDQogICJjb21wbGV0ZWx5X2Rlc3Ryb3llZF9ob3VzZXMiLA0KICAiZGFtYWdlZF91bmloYWJpdGFibGVfaG91c2VzIiwNCiAgInRlbXBvcmFyeV9hY2NvbW1vZGF0aW9uX2NlbnRyZXMiLA0KICAiaWRwc19pbl9hbGxfY2VudHJlcyIsDQogICJzY2hvb2xzX2FzX2FjY29tb2RhdGlvbl9jZW50cmVzIiwNCiAgImlkcHNfaW5fc2Nob29scyIsDQogICJ0ZW50c19uZWVkZWQiLA0KICAiYmxhbmtldHNfbWF0dHJlc3Nlc19uZWVkZWQiLA0KICAidGVtcG9yYXJ5X2FjY29tbW9kYXRpb25fY2VudHJlc19hdmFpbGFibGUiLCANCiAgImFjY2Vzc2libGVfY2l2aWxfZGVmZW5zZSIsDQogICJsYXRyaW5lc19hdmFpbGFibGUiLA0KICAibWVhbHNfbmVlZGVkX3Blcl9kYXkiLA0KICAibmVlZF9ibG9vZF9kb25hdGlvbnMiLA0KICAiaGVhbHRoX3NlcnZpY2VzX2F2YWlsYWJsZSIsDQogICJuZWNlc3NhcnlfbWVkaWNhbF9lcXVpcG1lbnQiLA0KICAicnViYmxlX3ZvbHVudGVlcnMiLA0KICAidGVsZWNvbXNfYXZhaWxhYmxlIiwNCiAgImVsZWN0cmljaXR5X2F2YWlsYWJsZSIsIA0KICAiaGVhdGluZ19mdWVsX25lZWRlZCINCikNCg0KZXEgPC0gcmVhZF9leGNlbCgiLi9kYXRhL3N5cmlhLWVhcnRocXVha2UtaW1wYWN0LTA1LW1hcmNoLTIwMjMueGxzeCIsDQogICAgICAgICAgICAgICAgIHNoZWV0ID0gIkRBVEFTRVQiKSAlPiUgDQogIHNldE5hbWVzKG5hbWVzX2VxKSAlPiUgDQogIGxlZnRfam9pbihsb2NhdGlvbnMgJT4lIHNlbGVjdChhZG1pbjRwY29kZSwgYWRtaW4zcGNvZGUpLCANCiAgICAgICAgICAgIGJ5ID0gYygiYWRtaW40IiA9ICJhZG1pbjRwY29kZSIpKQ0KDQoNCmhubyA8LSByZWFkX2V4Y2VsKCIuL2RhdGEvMjAyM0hOT19QaU5fU2V2ZXJpdHlfZGV0YWlsZWRBb0lfRk9SU0hBUkUgMTUwMzIwMjMueGxzeCIsIHNraXAgPSAxLCANCiAgICAgICAgICAgICAgICAgIHNoZWV0ID0gMSkgJT4lDQogIGNsZWFuX25hbWVzKCkNCg0KbndfcGNvZGUzIDwtIGhubyAlPiUgDQogIGZpbHRlcihhb19jID09ICJOVyIpICU+JSANCiAgcHVsbChhZG1pbjNwY29kZSkNCmBgYA0KDQoNCg0KPGJyPjxicj48YnI+DQoNCiMgMS4gTVBDIHJlc3BvbnNlIG92ZXJ2aWV3DQoNCkFzIG9mIGByIGZvcm1hdChTeXMudGltZSgpLCAiJUIgJWQgJVkiKWAsIGEgdG90YWwgb2YgYHIgZnNsICU+JSBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUge3N1bSguJGJlbmVmaWNpYXJpZXMpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgcGVyc29ucyBvciBgciBmc2wgJT4lIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSB7c3VtKC4kZmFtaWxpZXMpfSAlPiUgZm9ybWF0KGJpZy5tYXJrID0gIiwiKWAgZmFtaWxpZXMgaGF2ZSBiZWVuIHJlYWNoZWQgYnkgTVBDIGludGVydmVudGlvbnMuIA0KDQpBIHRvdGFsIG9mIFVTRCBgciBmc2wgJT4lIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSBtdXRhdGUodXNkX3RvdGFsID0gZmFtaWxpZXMgKiBxdWFudGl0eSkgJT4lICB7c3VtKC4kdXNkX3RvdGFsKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIGhhcyBiZWVuIGRpc2J1cnNlZCBieSBgciBmc2wgJT4lIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSBzdW1tYXJpc2Uobl9kaXN0aW5jdChwYXJ0bmVyX2NvZGUpKSAlPiUgcHVsbCgpYCBpbXBsZW1lbnRpbmcgYWdlbmNpZXMgYWNyb3NzIGByIGZzbCAlPiUgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIHN1bW1hcmlzZShuX2Rpc3RpbmN0KGFkbWluM3Bjb2RlKSkgJT4lIHB1bGwoKWAgc3ViLWRpc3RyaWN0cy4gDQoNCk9ubHkgYmVuZWZpY2lhcmllcyB3aG8gaGF2ZSByZWNlaXZlZCBhdCBsZWFzdCBVU0QgMTAwL2ZhbWlseS9tb250aCBoYXZlIGJlZW4gaW5jbHVkZWQuIEFkZGl0aW9uYWxseSwgY3VycmVudCBhY2hpZXZlbWVudCByZXBvcnRpbmcgaGFzIHlldCB0byBpbmNsdWRlIHRoZSBjb2xsZWN0aXZlIHNpdGVzLCBvbmx5IGluZm9ybWF0aW9uIG9uIGNvbW11bml0aWVzLCBzbyBpdCBpcyBub3QgY2xlYXIgdG8gd2hhdCBleHRlbnQgbmVlZHMgaGF2ZSBiZWVuIG1ldCBpbiB0aGVzZSBjZW50cmVzLiBUaGlzIHdpbGwgYmUgY29ycmVjdGVkIGluIHJldmlzZWQgNFcgdGVtcGxhdGUuIA0KDQo8YnI+DQoNCmBgYHtyIHN1bW1hcnkgdGFibGV9DQpmc2wgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUNCiAgbXV0YXRlKHVzZF90b3RhbCA9IGZhbWlsaWVzICogcXVhbnRpdHkpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUsIGRpc3RyaWN0KSAlPiUgDQogIHN1bW1hcmlzZShwYXJ0bmVycyA9IG5fZGlzdGluY3QocGFydG5lcl9jb2RlKSwgDQogICAgICAgICAgICBjb21tdW5pdGllcyA9IG5fZGlzdGluY3QoYWRtaW40cGNvZGUpLCANCiAgICAgICAgICAgIGhvdXNlaG9sZHMgPSBzdW0oZmFtaWxpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIHRvdGFsX3VzZCA9IHN1bSh1c2RfdG90YWwsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgdW5ncm91cCgpICU+JSANCiAgbXV0YXRlKGAlX2JlbmVmaWNpYXJpZXNgID0gDQogICAgICAgICAgIHJvdW5kKGJlbmVmaWNpYXJpZXMgLyBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSAqIDEwMCwgZGlnaXRzID0gMikpICU+JQ0KICBhZG9ybl90b3RhbHMoInJvdyIsLCwsIGhvdXNlaG9sZHMsIGJlbmVmaWNpYXJpZXMsIHRvdGFsX3VzZCwgYCVfYmVuZWZpY2lhcmllc2ApICU+JSANCiAgbXV0YXRlKGAlX2JlbmVmaWNpYXJpZXNgID0gaWZlbHNlKGAlX2JlbmVmaWNpYXJpZXNgID4gOTkuOTgsIDEwMCwgYCVfYmVuZWZpY2lhcmllc2ApKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgc2V0X2NhcHRpb24oIjMwOCw0NjcgcGVvcGxlIHJlYWNoZWQsIFVTRCA5LjQgbWlsbGlvbiBkaXNidXJzZWQsIDIwMjMwMzE3IikgJT4lIA0KICB0aGVtZV96ZWJyYSgpDQogIA0KICANCmBgYA0KDQo8YnI+PGJyPjxicj4NCg0KDQojIDIuIE1hcCBvZiBNUEMgYmVuZWZpY2lhcmllcyBhbmQgY29sbGVjdGl2ZS9yZWNlcHRpb24gY2VudHJlcw0KDQoNCjxicj4NCg0KDQpgYGB7ciBwbG90bHktc2l0ZXN9DQoNCnNpdGVfbWFwIDwtIHNpdGVzX2xvY2F0aW9uc19mc2wgJT4lIA0KICBsZWZ0X2pvaW4obG9jYXRpb25zICU+JSBzZWxlY3QoYWRtaW4zcGNvZGUsIGFkbWluNHBjb2RlKSwgDQogICAgICAgICAgICBieSA9ICJhZG1pbjRwY29kZSIpICU+JQ0KICByaWdodF9qb2luKHBjb2RlM19zaGFwZSwgDQogICAgICAgICAgICAgYnkgPSBjKCJhZG1pbjNwY29kZSIgPSAiQURNM19QQ09ERSIpKSAlPiUgDQogIGZpbHRlcihBRE0xX1BDT0RFICVpbiUgYygiU1kwMiIsICJTWTA3IikpICU+JSANCiAgc3RfYXNfc2YoKSAlPiUgDQogIG11dGF0ZSh0eXBlID0gZmN0X3JlbGV2ZWwodHlwZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiUkMvSURQIiwgIkJlbmVmaWNpYXJpZXMiKSkpICU+JSANCiAgZ2dwbG90KCkgKyANCiAgZ2VvbV9zZihzaXplID0gMC4xLCBjb2xvdXIgPSAiZ3JleTcwIikgKw0KICBnZW9tX3BvaW50KGFlcyhzaXplID0gcGVyc29ucywgDQogICAgICAgICAgICAgICAgICBjb2xvdXIgPSB0eXBlLA0KICAgICAgICAgICAgICAgICAgeCA9IGxvbmdpdHVkZV94LCB5ID0gbGF0aXR1ZGVfeSwNCiAgICAgICAgICAgICAgICAgIHRleHQgPSBwYXN0ZTAoInN1Yl9kaXN0cmljdDogIiwgc3ViX2Rpc3RyaWN0LCAiXG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZTogIiwgc2l0ZV9uYW1lLCAiXG4iLCAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZXJzb25zOiAiLCBwZXJzb25zLCAiXG4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGU6ICIsIHR5cGUsICJcbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9uX3g6ICIsIGxvbmdpdHVkZV94LCAiXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYXRfeTogIiwgbGF0aXR1ZGVfeSkpLCANCiAgICAgICAgICAgICBzaGFwZSA9IDIxLCBzdHJva2UgPSAuNQ0KICAgICAgICAgICAgICMgQWRqdXN0aW5nIGFscGhhIHdvbid0IGFmZmVjdCBhIHBsb3RseQ0KICAgICAgICAgICAgICkgKw0KICBzY2FsZV9zaXplX2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsNCiAgdGhlbWVfdm9pZCgpICsgDQogIHRoZW1lKHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gTkEpLCANCiAgICAgICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKw0KICBsYWJzKHRpdGxlID0gIkNvbGxlY3RpdmUvcmVjZXB0aW9uIGNlbnRyZXMgYW5kIE1QQyBiZW5lZmljaWFyaWVzIiwgDQogICAgICAgc3VidGl0bGUgPSAiSURQcyBpbiByZWQsIGJlbmVmaWNpYXJpZXMgaW4gYmx1ZSwgc2l6ZSBzaG93cyBudW1iZXIgb2YgcGVyc29ucyIpDQoNCmdncGxvdGx5KHNpdGVfbWFwLCB0b29sdGlwID0gYygidGV4dCIpKSAlPiUgDQogIHBsb3RseTo6c3R5bGUoaG92ZXJvbiA9ICJwb2ludCIpICU+JSANCiAgbGF5b3V0KHRpdGxlID0gbGlzdCh0ZXh0ID0gcGFzdGUwKCJDb2xsZWN0aXZlIGNlbnRyZXMgYW5kIGNhc2ggcmVzcG9uc2UgYmVuZWZpY2lhcmllcyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8c3VwPiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklEUHMgaW4gcmVkLCBiZW5lZmljaWFyaWVzIGluIGJsdWUsIHNpemUgc2hvd3MgbnVtYmVyIG9mIHBlcnNvbnM7IGNsaWNrIGFuZCBkcmFnIHRvIHpvb207IG1vdXNlIG92ZXIgZm9yIGRldGFpbHMiKSkpIA0KDQojIFdpbGwgdGhpcyB3b3JrPyANCiMgJT4lIHBhcnRpYWxfYnVuZGxlKCkNCg0KIyBnZ3NhdmUoInNpdGVfbWFwLnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gOC4yNywgd2lkdGggPSAxMS42OSwgdW5pdHMgPSAiaW4iKQ0KYGBgDQoNCg0KRGF0YSBvbiBjYXNoIHJlc3BvbnNlIGV4dHJhY3RlZCBmcm9tIFtGU0wgZWFydGhxdWFrZSB0cmFja2VyXShodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9zcHJlYWRzaGVldHMvZC8xS0dxdC0zWURoMms4cU5Da3NPSkFuZFJQTzU2R3E2cEdzNmVzRVF0SUZJdy9lZGl0I2dpZD0xODkwOTgxMTE1KSBvbiBNYXJjaCAxNyAyMDIzLiBEYXRhIG9uIGNvbGxlY3RpdmUgY2VudHJlcyBleHRyYWN0ZWQgZnJvbSBNYXJjaCAxNSAyMDIzLiANCg0KTG9jYXRpb25zIG9mIGJlbmVmaWNpYXJpZXMgaGF2ZSBiZWVuIGVzdGltYXRlZCAtLSB0aGUgRlNMIGRhdGFzZXQgZG9lcyBub3QgY2FsbCBmb3IgdGhlIGlucHV0IG9mIGdlb2Nvb3JkaW5hdGVzLiBJbnN0ZWFkLCB0aGUgYmx1ZSBjaXJjbGVzIGFyZSBzaXR1YXRlZCBhdCB0aGUgY2VudHJvaWRzIGZvciBjb21tdW5pdGllcy92aWxsYWdlcywgYXMgcmVjb3JkZWQgaW4gdGhlIE9DSEEgZ2VvZGFtaW5zIHJlZmVyZW5jZSBkYXRhc2V0LiANCg0KVGhpcyBtZWFucyB0aGF0IHdlIGRvIG5vdCBoYXZlIGFuIGFjY3VyYXRlIHJlY29yZCBvZiB3aGljaCBjZW50cmVzIGhhdmUgcmVjZWl2ZWQgd2hpY2ggYWN0aXZpdGllcy4gVGhpcyB1bmRlcnNjb3JlcyB0aGUgaW1wb3J0YW5jZSBvZiBpbmNsdWRpbmcgb2YgY29kaWZ5aW5nIGFuZCBpbmNsdWRpbmcgZWFjaCBvZiB0aGUgdGVtcG9yYXJ5IHNpdGVzIHNvIHRoYXQgd2UgbWF5IHRyYWNrIHRoZSBwcm9ncmVzcyBvZiB0aGUgcmVzcG9uc2UgYW5kIGlkZW50aWZ5IGFueSBnYXBzIGluIGNvdmVyYWdlIHRoYXQgYXJpc2UuIFRlbXBvcmFyeSBzaXRlcyBoYXZlIGJlZW4gaW5jbHVkZWQgaW4gdGhlIHJldmlzZWQgNFdzLiANCg0KPGJyPjxicj4NCg0KDQojIDMuIEdlb2dyYXBoaWMgYnJlYWtkb3duIG9mIGJlbmVmaWNpYXJpZXMNCg0KQ292ZXJhZ2UgaXMgaGlnaGVzdCBpbiBBZnJpbiBhbmQgSGFyaW0gZGlzdHJpY3RzIC0tIHN1YnN0YW50aWFsbHkgc28uIA0KDQo8YnI+DQoNCmBgYHtyfQ0KZnNsICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBtdXRhdGUoZ292ZXJub3JhdGUgPSBpZmVsc2UoZ292ZXJub3JhdGUgPT0gImlkbGViIiwgIklkbGViIiwgZ292ZXJub3JhdGUpLA0KICAgICAgICAgZGlzdHJpY3QgPSBpZmVsc2UoZGlzdHJpY3QgPT0gImlkbGViIiwgIklkbGViIiwgZGlzdHJpY3QpKSAlPiUgDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlLCBkaXN0cmljdCkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShkaXN0cmljdCA9IGZjdF9yZW9yZGVyKGRpc3RyaWN0LCBiZW5lZmljaWFyaWVzKSwgDQogICAgICAgICBnb3Zlcm5vcmF0ZSA9IGZjdF9yZWxldmVsKGdvdmVybm9yYXRlLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiSWRsaWIiLCAiQWxlcHBvIikpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGJlbmVmaWNpYXJpZXMsIHkgPSBkaXN0cmljdCkpICsgDQogIGdlb21fY29sKGFlcyhmaWxsID0gZ292ZXJub3JhdGUpKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY29tbWEoYmVuZWZpY2lhcmllcykpLCANCiAgICAgICAgICAgIGhqdXN0ID0gImlud2FyZCIpICsgDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKGJlZ2luID0gLjMpICsgDQogIGxhYnModGl0bGUgPSAiTVBDIGJlbmVmaWNpYXJpZXMgYnkgZGlzdHJpY3QiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJhcyBvZiAxNyBNYXJjaCAyMDIzIiwgDQogICAgICAgeSA9ICIiKSArIA0KICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKw0KDQpobm8gJT4lIA0KICBmaWx0ZXIoYWRtaW4ybmFtZV9lbiAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUgPSBhZG1pbjFuYW1lX2VuLCBkaXN0cmljdCA9IGFkbWluMm5hbWVfZW4pICU+JSANCiAgc3VtbWFyaXNlKHRvdGFsX3BvcHVsYXRpb24gPSBzdW0odG90YWxfcG9wdWxhdGlvbiwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBsZWZ0X2pvaW4oDQogICAgZnNsICU+JQ0KICAgICAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICAgICAgbXV0YXRlKGdvdmVybm9yYXRlID0gaWZlbHNlKGdvdmVybm9yYXRlID09ICJpZGxlYiIsICJJZGxlYiIsIGdvdmVybm9yYXRlKSwNCiAgICAgICAgICAgICBkaXN0cmljdCA9IGlmZWxzZShkaXN0cmljdCA9PSAiaWRsZWIiLCAiSWRsZWIiLCBkaXN0cmljdCkpICU+JSANCiAgICAgIGdyb3VwX2J5KGRpc3RyaWN0KSAlPiUgDQogICAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAsICANCiAgYnkgPSAiZGlzdHJpY3QiKSAlPiUgDQogIG11dGF0ZShkaXN0cmljdCA9IGZjdF9yZW9yZGVyKGRpc3RyaWN0LCBiZW5lZmljaWFyaWVzKSwgDQogICAgICAgICBnb3Zlcm5vcmF0ZSA9IGZjdF9yZWxldmVsKGdvdmVybm9yYXRlLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiSWRsaWIiLCAiQWxlcHBvIikpLCANCiAgICAgICAgIHBjX3JlYWNoZWQgPSByb3VuZChiZW5lZmljaWFyaWVzIC8gdG90YWxfcG9wdWxhdGlvbiAqIDEwMCwgZGlnaXRzID0gMikpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gcGNfcmVhY2hlZCwgeSA9IGRpc3RyaWN0KSkgKw0KICBnZW9tX2NvbChhZXMoZmlsbCA9IGdvdmVybm9yYXRlKSkgKyANCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvbW1hKHBjX3JlYWNoZWQpKSwgDQogICAgICAgICAgICBoanVzdCA9ICJpbndhcmQiKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKGJlZ2luID0gLjMpICsgDQogIGxhYnModGl0bGUgPSAiUGVyY2VudCBvZiBwb3B1bGF0aW9uIHJlYWNoZWQiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJhcyBvZiAxNyBNYXJjaCAyMDIzIiwgDQogICAgICAgeSA9ICIiLCANCiAgICAgICB4ID0gIiUgb2YgcG9wdWxhdGlvbiByZWFjaGVkIikgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQoNCg0KYGBgDQoNCjxicj4NCg0KVGhlIGN1cnJlbnQgZGlzdHJpYnV0aW9uIG9mIGJlbmVmaWNpYXJpZXMsIGF0IGxlYXN0IGF0IGRpc3RyaWN0IGxldmVsLCBpcyBjb21tb25zZW5zaWNhbC4gSGFyaW0gYW5kIEFmcmluIGRvIGhhdmUgYSBtdWNoIGxhcmdlciBzaGFyZSBvZiB0aGUgZWFydGhxYXVrZSBpbXBhY3RzLiBCZWFyIGluIG1pbmQgdGhhdCB0aGUgZmlndXJlcyBiZWxvdyBvbmx5IHBlcnRhaW4gdG8gcG9wdWxhdGlvbnMgd2l0aGluIHRoZSBBT0Mgb2YgTm9ydGh3ZXN0IFN5cmlhIGFuZCBub3QgYWxsIHBhcnRzIG9mIGVhY2ggZGlzdHJpY3QgYXJlIGluY2x1ZGVkLiANCg0KPGJyPg0KDQoNCmBgYHtyfQ0KZXEgJT4lIA0KICBmaWx0ZXIoYWRtaW4zcGNvZGUgJWluJSBud19wY29kZTMgJiANCiAgICAgICAgICAgZGlzdHJpY3QgJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUgDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlLCBkaXN0cmljdCkgJT4lIA0KICBzdW1tYXJpc2UoY2FzdWFsdGllcyA9IHN1bShjYXN1YWx0aWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGluanVyaWVzID0gc3VtKGluanVyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIHRvdGFsbHlfZGFtYWdlZCA9IHN1bShjb21wbGV0ZWx5X2Rlc3Ryb3llZF9ob3VzZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgcGFydGlhbGx5X2RhbWFnZWQgPSBzdW0oZGFtYWdlZF91bmloYWJpdGFibGVfaG91c2VzLCBuYS5ybSA9IFRSVUUpKSAlPiUNCiAgIyBXaGVyZSBpcyBBcmloYSwgYW5kIHdoeSBpcyBpdCBzaG93aW5nIHVwIGhlcmUNCiAgZmlsdGVyKGRpc3RyaWN0ICE9ICJBcmloYSIpICU+JSANCiAgbGVmdF9qb2luKGhubyAlPiUgDQogICAgICAgICAgICAgIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmDQogICAgICAgICAgICAgICAgICAgICAgIGFkbWluMm5hbWVfZW4gJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUNCiAgICAgICAgICAgICAgZ3JvdXBfYnkoZGlzdHJpY3QgPSBhZG1pbjJuYW1lX2VuKSAlPiUNCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHBvcHVsYXRpb24gPSBzdW0odG90YWxfcG9wdWxhdGlvbiwgbmEucm0gPSBUUlVFKSksIGJ5ID0gImRpc3RyaWN0IikgJT4lIA0KICBtdXRhdGUod291bmRlZF9kZWFkID0gY2FzdWFsdGllcyArIGluanVyaWVzLCANCiAgICAgICAgIGRhbWFnZWRfaG91c2VzID0gdG90YWxseV9kYW1hZ2VkICsgcGFydGlhbGx5X2RhbWFnZWQsIA0KICAgICAgICAgd291bmRlZF9kZWFkXzEwMGsgPSByb3VuZCh3b3VuZGVkX2RlYWQgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSwgDQogICAgICAgICBkYW1hZ2VkX2hvdXNlc18xMDBrID0gcm91bmQoZGFtYWdlZF9ob3VzZXMgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSkgJT4lIA0KICBzZWxlY3QoZ292ZXJub3JhdGUsIGRpc3RyaWN0LCB3b3VuZGVkX2RlYWQsIHdvdW5kZWRfZGVhZF8xMDBrLCANCiAgICAgICAgIGRhbWFnZWRfaG91c2VzLCBkYW1hZ2VkX2hvdXNlc18xMDBrKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOTkpICU+JSANCiAgc2V0X2NhcHRpb24oIkNhc3VhbHRpZXMgYW5kIGRhbWFnZWQgaG91c2VzLCBhYnNvbHV0ZSBmaWd1cmVzIGFuZCBwZXIgMTAwLDAwMCBwZXJzb25zIikgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDM6NiwgcGFydCA9ICJoZWFkZXIiLA0KICAgICAgICAgICBhc19wYXJhZ3JhcGgoIkRhdGEgZnJvbSB0aGUgQXNzaXN0YW5jZSBDb29yZGluYXRpb24gVW5pdCwgU3lyaWEgMjAyMzAzMDciKSkNCg0KDQpgYGANCg0KV2hlbiByZXZpZXdpbmcgdGhlIGRpc3RyaWN0LWxldmVsIHNwcmVhZCBvZiBjYXN1YWx0aWVzIGFuZCB0b3RhbGx5LSBhbmQgcGFydGlhbGx5LWRhbWFnZWQgaG91c2VzLCBIYXJpbSBhbmQgQWZyaW4gZG8gc3RhbmQgb3V0IGluIHRlcm1zIG9mIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGRhbWFnZSwgdGhvdWdoIGl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHRoZSBzaGFyZSBvZiBkYW1hZ2VkIGhvdXNlcyBpbiBBZnJpbiBpcyBtdWNoIGhpZ2hlciB0aGFuIGluIEhhcmltLiANCg0KRm9sbG93aW5nIHRoZW0sIEplYmVsIFNhbWFuIGFuZCBKaXNyLWFzaC1TaHVndXIgaGF2ZSB0aGUgbmV4dCBtb3N0IHNldmVyZSBkYW1hZ2UsIHRob3VnaCwgYXMgY2FuIGJlIHNlZW4gZnJvbSB0aGUgdGFibGUgYmVsb3csIHRoZWlyIHBvcHVsYXRpb25zICh3aXRoaW4gdGhlIGFyZWEgb2YgY29udHJvbCkgYXJlIGNvbXBhcmF0aXZlbHkgc21hbGxlci4gDQoNCkFzc2Vzc21lbnRzIGFyZSBzdGlsbCBvbmdvaW5nIGFuZCB0aGUgQ1dHIHdpbGwgdXBkYXRlIHRoZXNlIHRhYmxlcyB3aGVuIG5ldyBkYXRhIGJlY29tZXMgYXZhaWxhYmxlLiANCg0KPGJyPg0KDQoNCmBgYHtyfQ0KDQpobm8gJT4lIA0KICBmaWx0ZXIoYWRtaW4ybmFtZV9lbiAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikgJg0KICAgICAgICAgICBhb19jID09ICJOVyIpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUgPSBhZG1pbjFuYW1lX2VuLCBkaXN0cmljdCA9IGFkbWluMm5hbWVfZW4pICU+JSANCiAgc3VtbWFyaXNlKHRvdGFsX3BvcHVsYXRpb24gPSBzdW0odG90YWxfcG9wdWxhdGlvbiwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBsZWZ0X2pvaW4oDQogICAgZnNsICU+JQ0KICAgICAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICAgICAgbXV0YXRlKGdvdmVybm9yYXRlID0gaWZlbHNlKGdvdmVybm9yYXRlID09ICJpZGxlYiIsICJJZGxlYiIsIGdvdmVybm9yYXRlKSwNCiAgICAgICAgICAgICBkaXN0cmljdCA9IGlmZWxzZShkaXN0cmljdCA9PSAiaWRsZWIiLCAiSWRsZWIiLCBkaXN0cmljdCkpICU+JSANCiAgICAgIGdyb3VwX2J5KGRpc3RyaWN0KSAlPiUgDQogICAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgICAgICBwYXJ0bmVycyA9IG5fZGlzdGluY3QocGFydG5lcl9jb2RlKSkgLCAgDQogIGJ5ID0gImRpc3RyaWN0IikgJT4lIA0KICBtdXRhdGUoYCVfcmVhY2hlZGAgPSByb3VuZChiZW5lZmljaWFyaWVzIC8gdG90YWxfcG9wdWxhdGlvbiAqIDEwMCwgZGlnaXRzID0gMikpICU+JSANCiAgcmVsb2NhdGUocGFydG5lcnMsIC5hZnRlciA9IGxhc3RfY29sKCkpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC44KSAlPiUgDQogIHNldF9jYXB0aW9uKCJQZXJjZW50YWdlIG9mIHBvcHVsYXRpb24gcmVhY2hlZCBieSBkaXN0cmljdCIpICU+JSANCiAgZm9vdG5vdGUoaSA9IDEsIGogPSAzLCBwYXJ0ID0gImhlYWRlciIsIA0KICAgICAgICAgICBhc19wYXJhZ3JhcGgoIk9ubHkgcGVyc29ucyB3aXRoaW4gdGhlIE5XIEFyZWEgb2YgQ29udHJvbCIpKQ0KYGBgDQoNCjxicj4NCg0KVGhvdWdoIHRoZSBlYXJ0aHF1YWtlIGRhbWFnZSBpcyBub3QgYXMgc2V2ZXJlIGluIEEnemF6LCBBbCBCYWIsIEphcmFibHVzLCBJZGxlYiBhbmQgSmlzci1hc2gtU2h1Z3VyLCBhIG11Y2ggaGlnaGVyIHByb3BvcnRpb24gb2YgbmVlZHMgaW4gdGhlc2UgYXJlYXMgcmVtYWluIHVubWV0LCBnaXZlbiB0aGUgbG93IHBlcmNlbnRhZ2VzIG9mIHBlcnNvbnMgcmVhY2hlZC4gDQoNClRoZSBlc3RhYmxpc2htZW50IG9mIHN1Ym5hdGlvbmFsIHRhcmdldHMgYXQgdGhlIGRpc3RyaWN0IGFuZCBzdWItZGlzdHJpY3QgbGV2ZWwsIHdpbGwgZ28gc29tZSB3YXkgdG93YXJkcyBjbGFyaWZ5aW5nIGhvdyByZXNvdXJjZXMgc2hvdWxkIGJlIGFsbG9jYXRlZCBhY3Jvc3MgdGhlIGFmZmVjdGVkIGFyZWFzLiANCg0KDQo8YnI+PGJyPg0KDQojIyAzLjEgQnJlYWtkb3duIGJ5IHBhcnRuZXIgYW5kIGRpc3RyaWN0DQoNCkhhcmltLCBieSBmYXIgYW5kIGF3YXkgaGFzIHRoZSBoaWdoZXN0IGNvbmNlbnRyYXRpb24gb2YgcGFydG5lcnMgKDEyKSwgZG91YmxlIHRoYXQgb2YgdGhlIG5leHQgaGlnaGVzdCBkaXN0cmljdCAoQWZyaW4pLiANCg0KPGJyPg0KDQpgYGB7cn0NCg0KDQpzdGFja190ZXh0IDwtIGZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUsIGRpc3RyaWN0KSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShkaXN0cmljdCA9IGZjdF9yZWxldmVsKGRpc3RyaWN0LCBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLCANCiAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSkNCg0Kc3RhY2sgPC0gZnNsICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBncm91cF9ieShkaXN0cmljdCwgcGFydG5lcl9jb2RlKSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgdW5ncm91cCgpICU+JQ0KICBtdXRhdGUoZGlzdHJpY3QgPSBmY3RfcmVsZXZlbChkaXN0cmljdCwgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSwgDQogICAgICAgICBkaXN0cmljdCA9IGZjdF9yZXYoZGlzdHJpY3QpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gZGlzdHJpY3QsIA0KICAgICAgICAgICAgIHggPSBiZW5lZmljaWFyaWVzKSkgKw0KICBnZW9tX2NvbChhZXMoZmlsbCA9IHBhcnRuZXJfY29kZSkpICsgDQogIGdlb21fdGV4dChkYXRhID0gc3RhY2tfdGV4dCwgDQogICAgICAgICAgICBhZXMoeCA9IHRvdGFsICsgNjAwMCwgDQogICAgICAgICAgICAgICAgbGFiZWwgPSBzY2FsZXM6OmNvbW1hKHRvdGFsKSkpICsgDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKyANCiAgbGFicyh5ID0gIiIsIA0KICAgICAgIHggPSAiQmVuZWZpY2lhcmllcyIsIA0KICAgICAgIHRpdGxlID0gIlBhcnRuZXIgYWNoaWV2ZW1lbnRzIGJ5IGRpc3RyaWN0LCAyMDIzMDMxNyIpICsgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCg0KZ2dwbG90bHkoc3RhY2ssIHRvb2x0aXAgPSBjKCJmaWxsIiwgIngiLCAieSIpKSAlPiUgDQogIGxheW91dCh0aXRsZSA9IGxpc3QodGV4dCA9IHBhc3RlMCgiUGFydG5lciBhY2hpZXZlbWVudHMgYnkgZGlzdHJpY3QsIDIwMjMwMzE3IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGJyPiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxzdXA+IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW91c2Ugb3ZlciBmb3IgZGV0YWlscyIpKSkNCg0KYGBgDQoNCjxicj48YnI+DQoNCiMjIDMuMiBTY2F0dGVycGxvdCBvZiBzdWItZGlzdHJpY3RzIA0KDQpUaGUgcGxvdCBiZWxvdyBzaG93cyB0aGUgdG90YWwgcG9wdWxhdGlvbiBvZiBlYWNoIHN1Yi1kaXN0cmljdCBvbiB0aGUgeC1heGlzIChmb3IgdGhlIG1vbWVudCwgYWxsIHBlcnNvbnMgaW4gdGhlc2UgYXJlYXMgYXJlIGFzc3VtZWQgdG8gYmUgYWZmZWN0ZWQgYW5kIGFyZSBpbmNsdWRlZCBpbiB0aGUgUElOKSBhbmQgdGhlIG51bWJlciBvZiBiZW5lZmljaWFyaWVzIG9uIHRoZSB5LWF4aXMuIA0KDQpUaGUgc2l6ZSBvZiBlYWNoIHBvaW50IGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGRlYWQgb3Igd291bmRlZCBwZXJzb25zIHRoZXJlIHBlciAxMDAsMDAwLiANCg0KPGJyPg0KDQoNCmBgYHtyLCBkcGkgPSAzMDB9DQplcSAlPiUgDQogIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmIA0KICAgICAgICAgICBkaXN0cmljdCAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUsIGRpc3RyaWN0LCBzdWJfZGlzdHJpY3QsIGFkbWluM3Bjb2RlKSAlPiUgDQogIHN1bW1hcmlzZShjYXN1YWx0aWVzID0gc3VtKGNhc3VhbHRpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgaW5qdXJpZXMgPSBzdW0oaW5qdXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgdG90YWxseV9kYW1hZ2VkID0gc3VtKGNvbXBsZXRlbHlfZGVzdHJveWVkX2hvdXNlcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBwYXJ0aWFsbHlfZGFtYWdlZCA9IHN1bShkYW1hZ2VkX3VuaWhhYml0YWJsZV9ob3VzZXMsIG5hLnJtID0gVFJVRSkpICU+JQ0KICAjIFdoZXJlIGlzIEFyaWhhLCBhbmQgd2h5IGlzIGl0IHNob3dpbmcgdXAgaGVyZQ0KICBmaWx0ZXIoZGlzdHJpY3QgIT0gIkFyaWhhIikgJT4lIA0KICBsZWZ0X2pvaW4oaG5vICU+JSANCiAgICAgICAgICAgICAgZmlsdGVyKGFkbWluM3Bjb2RlICVpbiUgbndfcGNvZGUzICYNCiAgICAgICAgICAgICAgICAgICAgICAgYWRtaW4ybmFtZV9lbiAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JQ0KICAgICAgICAgICAgICBncm91cF9ieShhZG1pbjNwY29kZSkgJT4lDQogICAgICAgICAgICAgIHN1bW1hcmlzZShwb3B1bGF0aW9uID0gc3VtKHRvdGFsX3BvcHVsYXRpb24sIG5hLnJtID0gVFJVRSkpLCANCiAgICAgICAgICAgIGJ5ID0gImFkbWluM3Bjb2RlIikgJT4lIA0KICBtdXRhdGUod291bmRlZF9kZWFkID0gY2FzdWFsdGllcyArIGluanVyaWVzLCANCiAgICAgICAgIGRhbWFnZWRfaG91c2VzID0gdG90YWxseV9kYW1hZ2VkICsgcGFydGlhbGx5X2RhbWFnZWQsIA0KICAgICAgICAgd291bmRlZF9kZWFkXzEwMGsgPSByb3VuZCh3b3VuZGVkX2RlYWQgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSwgDQogICAgICAgICBkYW1hZ2VkX2hvdXNlc18xMDBrID0gcm91bmQoZGFtYWdlZF9ob3VzZXMgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSkgJT4lIA0KICAgIGxlZnRfam9pbihmc2wgJT4lIA0KICAgICAgICAgICAgICAgIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgICAgICAgICAgICAgICBncm91cF9ieShhZG1pbjNwY29kZSkgJT4lIA0KICAgICAgICAgICAgICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpLCANCiAgICAgICAgICAgICAgYnkgPSAiYWRtaW4zcGNvZGUiKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHBvcHVsYXRpb24sIHkgPSBiZW5lZmljaWFyaWVzKSkgKyANCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IHdvdW5kZWRfZGVhZF8xMDBrKSkgKyANCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHN1Yl9kaXN0cmljdCksIGhqdXN0ID0gMSwgdmp1c3QgPSAxLCANCiAgICAgICAgICAgIHNpemUgPSAyKSArIA0KICBzY2FsZV94X2xvZzEwKGJyZWFrcyA9IGMoMCwgMzAwMCwgMTAwMDAsIDMwMDAwLCAxMDAwMDAsIDMwMDAwMCwgMTAwMDAwMCksIA0KICAgICAgICAgICAgICAgIGxhYmVscyA9IGNvbW1hKSArIA0KICBzY2FsZV95X2xvZzEwKGJyZWFrcyA9IGMoMCwgMTAwMCwgMzAwMCwgMTAwMDAsIDMwMDAwLCAxMDAwMDApLA0KICAgICAgICAgICAgICAgIGxhYmVscyA9IGNvbW1hKSArIA0KICBzY2FsZV9zaXplKGJyZWFrcyA9IGMoMCwgMTAwLCA1MDAsIDEwMDAsIDMwMDApKSArDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gRkFMU0UsIGNvbG91ciA9ICJibHVlIikgKw0KICBsYWJzKHRpdGxlID0gIlBvcHVsYXRpb24gYW5kIE1QQyBiZW5lZmljaWFyaWVzIGJ5IHN1Yi1kaXN0cmljdCIsDQogICAgICAgc3VidGl0bGUgPSAiU2l6ZSBpbmRpY2F0ZXMgZGVhZC93b3VuZGVkIHBlciAxMDAsMDAwMCIsIA0KICAgICAgIHggPSAiUG9wdWxhdGlvbiIsIA0KICAgICAgIHkgPSAiQmVuZWZpY2lhcmllcyIsIA0KICAgICAgIHNpemUgPSAiRGVhZC93b3VuZGVkXG5wZXIgMTAwayIsIA0KICAgICAgIGNhcHRpb24gPSAiRGF0YSBmcm9tIEFzc2lzdGFuY2UgQ29vcmRpbmF0aW9uIFVuaXQgYW5kIEZvb2QgU2VjdXJpdHkgYW5kIExpdmVsaWhvb2RzIENsdXN0ZXIiKSArDQogIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IC41KSkNCmBgYA0KDQo8YnI+DQoNCk92ZXJhbGwsIHdlIHNlZSBmYWlyIGFsaWdubWVudCBiZXR3ZWVuIHRoZSBtYWduaXR1ZGUgb2YgdGhlIG5lZWRzICh0b3RhbCBwb3B1bGF0aW9uKSBhbmQgdGhlIG51bWJlciBvZiBiZW5lZmljaWFyaWVzIC0tIHRoaXMgaXMgZXZpZGVuY2VkIGJ5IHRoZSBibHVlIGxpbmUgc2hvd2luZyBhIHBvc2l0aXZlIHJlbGF0aW9uc2hpcC4gDQoNCkhvd2V2ZXIsIHdlIGRvIG5vdGUgc2V2ZXJhbCBtaXNtYXRjaGVzIC0tIERhbmEgc2VlbXMgdG8gaGF2ZSByZWNlaXZlZCBhbiBvdXRzaXplZCBzaGFyZSBvZiBiZW5lZmljaWFyaWVzLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgdGhlIGNhc3VhbHR5IHJhdGUuIEFuZCBLYWZyIFRha2hhcmltIHNlZW1zIHRvIGhhdmUgYmVlbiBhbGxvY2F0ZWQgcmVsYXRpdmVseSBmZXdlciByZXNvdXJjZXMgaW4gY29tcGFyaXNvbiB0byB0aGUgZGVhdGggdG9sbCB0aGVyZS4gDQoNCg0KPGJyPjxicj48YnI+DQoNCg0KIyA0LiBDYXNoIHJlc3BvbnNlIGFjdG9ycyBhbmQgY2FzaCBkaXNidXJzZWQNCg0KSW4gdGhlIHNjYXR0ZXJwbG90IGJlbG93LCBlYWNoIHBvaW50IGlzIGEgc2luZ2xlIGNhc2ggd29ya2luZyBncm91cCBwYXJ0bmVyLiBUaGUgeC1heGlzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGJlbmVmaWNpYXJpZXMgcmVhY2hlZCBwZXIgYWdlbmN5IGFuZCB0aGUgeS1heGlzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGNvbW11bml0aWVzIChhZG1pbjQpIHJlYWNoZWQuIA0KDQo8YnI+DQoNCmBgYHtyIHRvdGFscywgZXZhbCA9IEZBTFNFfQ0KDQpmc2wgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgDQogIG11dGF0ZSh1c2RfdG90YWwgPSBmYW1pbGllcyAqIHF1YW50aXR5KSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgdXNkX3RvdGFsID0gc3VtKHVzZF90b3RhbCwgbmEucm0gPSBUUlVFKSkNCg0KYGBgDQoNCg0KDQpgYGB7ciBwYXJ0bmVyLXNjYXR0ZXJ9DQpwYXJ0bmVyX3NjYXR0ZXIgPC0gZnNsICU+JSANCiAgIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgZ3JvdXBfYnkocGFydG5lcl9jb2RlLCANCiAgICAgICAgICAgYWRtaW4ycGNvZGUsIA0KICAgICAgICAgICBhZG1pbjRwY29kZSkgJT4lIA0KICBzbGljZSh3aGljaC5tYXgoYmVuZWZpY2lhcmllcykpICU+JSANCiAgdW5ncm91cCgpICU+JSANCiAgZ3JvdXBfYnkocGFydG5lcl9jb2RlKSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgY29tbXVuaXRpZXMgPSBuX2Rpc3RpbmN0KGFkbWluNHBjb2RlKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBiZW5lZmljaWFyaWVzLCB5ID0gY29tbXVuaXRpZXMpKSArDQogIGdlb21fcG9pbnQoYWVzKHNpemUgPSBiZW5lZmljaWFyaWVzLCANCiAgICAgICAgICAgICAgICAgdGV4dCA9IHBhc3RlMChwYXJ0bmVyX2NvZGUsICJcbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZW5lZmljaWFyaWVzOiAiLCBmb3JtYXQoYmVuZWZpY2lhcmllcywgYmlnLm1hcmsgPSAiLCIpLCAiXG4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tbXVuaXRpZXM6ICIsIGNvbW11bml0aWVzKSkpICsgDQogIHNjYWxlX3hfbG9nMTAobGFiZWxzID0gY29tbWEpICsgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKyANCiAgbGFicyh4ID0gIkJlbmVmaWNpYXJpZXMgcmVhY2hlZCIsIA0KICAgICAgIHkgPSAiQ29tbXVuaXRpZXMgKGFkbWluNCkgcmVhY2hlZCIsIA0KICAgICAgIHRpdGxlID0gIkltcGxlbWVudGluZyBwYXJ0bmVycyAtLSBiZW5lZmljaWFyaWVzIGFuZCBjb21tdW5pdGllcyByZWFjaGVkIikNCg0KZ2dwbG90bHkocGFydG5lcl9zY2F0dGVyLCB0b29sdGlwID0gYygidGV4dCIpKSAlPiUgDQogIGxheW91dChzaG93bGVnZW5kID0gVFJVRSwgbGVnZW5kID0gbGlzdChmb250ID0gKGxpc3Qoc2l6ZSA9IDYpKSkpICU+JSANCiAgcGxvdGx5OjpzdHlsZShob3Zlcm9uID0gInBvaW50IikgJT4lIA0KICBsYXlvdXQodGl0bGUgPSBsaXN0KHRleHQgPSBwYXN0ZTAoIkJlbmVmaWNpYXJpZXMgYW5kIGNvbW11bml0aWVzIHJlYWNoZWQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxzdXA+IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYXNoIHJlc3BvbnNlIGltcGxlbWVudGluZyBwYXJ0bmVycyIsIjwvc3VwPiIpKSkNCg0KDQpgYGANCg0KPGJyPg0KDQpVU0QgYHIgZnNsICU+JSBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgbXV0YXRlKHVzZF90b3RhbCA9IGZhbWlsaWVzICogcXVhbnRpdHkpICU+JSB7c3VtKC4kdXNkX3RvdGFsKX0gJT4lIGZvcm1hdChiaWcubWFyayA9ICIsIilgIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIGFjcm9zcyBgciBmc2wgJT4lIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSB7bl9kaXN0aW5jdCguJGFkbWluNHBjb2RlKX1gIGNvbW11bml0aWVzIGFuZCBgciBmc2wgJT4lIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSB7bl9kaXN0aW5jdCguJGFkbWluM3Bjb2RlKX1gIHN1Yi1kaXN0cmljdHMgaW4gTlcgU3lyaWEuDQoNCg0KVGhlIHRhYmxlIGJlbG93IHN1bW1hcmlzZXMgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBzY2F0dGVycGxvdCBhYm92ZSBpbiB0YWJ1bGFyIGZvcm06DQoNCjxicj4NCg0KDQoNCmBgYHtyfQ0KZnNsICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBncm91cF9ieShwYXJ0bmVyX2NvZGUsIA0KICAgICAgICAgICBhZG1pbjJwY29kZSwgDQogICAgICAgICAgIGFkbWluNHBjb2RlKSAlPiUgDQogIHNsaWNlKHdoaWNoLm1heChiZW5lZmljaWFyaWVzKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBncm91cF9ieShwYXJ0bmVyX2NvZGUpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBkaXN0cmljdHMgPSBuX2Rpc3RpbmN0KGFkbWluMnBjb2RlKSwgDQogICAgICAgICAgICBjb21tdW5pdGllcyA9IG5fZGlzdGluY3QoYWRtaW40cGNvZGUpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhiZW5lZmljaWFyaWVzKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHNldF9jYXB0aW9uKCJSZWFjaCBhbmQgZm9vdHByaW50IG9mIGNhc2ggcmVzcG9uc2UgYWN0b3JzIikgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC44KSAlPiUgDQogIGZvb3Rub3RlKGFzX3BhcmFncmFwaCgiT25seSBwYXJ0bmVycyB3aG8gcHJvdmlkZWQgbW9yZSB0aGFuIFVTRCAxMDAvZmFtaWx5L21vbnRoIiksIA0KICAgICAgICAgICBpID0gMSwgaiA9IDEsIHBhcnQgPSAiaGVhZGVyIikNCiAgDQpgYGANCg0KDQoNCjxicj48YnI+DQoNCg0KDQojIyA0LjEgVVNEIGRpc2J1cnNlZCBieSBwYXJ0bmVyDQoNClRoZXJlIGlzIHZlcnkgZ29vZCBjb21wbGlhbmNlIHdpdGggQ1dHIHN0YW5kYXJkcyBvbiB0aGUgdHJhbnNmZXIgdmFsdWVzIG9mIG11bHRpcHVycG9zZSBjYXNoIGludGVydmVudGlvbnMsIGFzIGNhbiBiZSBzZWVuIGJ5IHRoZSBgdXNkX3Blcl9mYW1gIGNvbHVtbiBpbiB0aGUgdGFibGUgYmVsb3cuIA0KDQo8YnI+DQoNCg0KYGBge3J9DQpmc2wgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgDQogIG11dGF0ZSh1c2RfdG90YWwgPSBmYW1pbGllcyAqIHF1YW50aXR5KSAlPiUgDQogIGdyb3VwX2J5KHBhcnRuZXJfY29kZSkgJT4lIA0KICBzdW1tYXJpc2UodXNkX3RvdGFsID0gc3VtKHVzZF90b3RhbCwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBmYW1pbGllcyA9IHN1bShmYW1pbGllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUodXNkX3Blcl9mYW0gPSByb3VuZCh1c2RfdG90YWwgLyBmYW1pbGllcywgZGlnaXRzID0gMiksIA0KICAgICAgICAgYCVfdXNkX3RvdGFsYCA9IHJvdW5kKHVzZF90b3RhbCAvIHN1bSh1c2RfdG90YWwpICogMTAwLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0gMikpICU+JQ0KICBhcnJhbmdlKGRlc2ModXNkX3RvdGFsKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHNldF9jYXB0aW9uKCJVU0QgZGlzYnVyc2VkIGFuZCBmYW1pbGllcyByZWFjaGVkIGJ5IHBhcnRuZXIiKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBmbGV4dGFibGU6OnNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOCkNCmBgYA0KDQoNCjxicj4NCg0KQnJvYWRlbmluZyB0aGUgc2NvcGUgdG8gbG9vayBhdCBhbGwgY2FzaC1iYXNlZCBhY3Rpdml0aWVzLCBub3QganVzdCBNUEMsIGl0IGlzIHN0aWxsIG9ic2VydmVkIHRoYXQgbW9yZSB0aGF0IDMvNCBvZiBhbGwgYmVuZWZpY2lhcnkgaG91c2Vob2xkcyBoYXZlIHJlY2VpdmVkIGEgVVNEIDE1MCBwYXltZW50LCB3aXRoIGFib3V0IDEwJSByZWNlaXZpbmcgVVNEIDUwLiANCg0KVGhpcyBtYXkgbmVjZXNzaXRhdGUgc3BsaXR0aW5nIHRoZSBgQ2FzaCBSZXNwb25zZWAgYWN0aXZpdHkgaW50byBhIGZ1bGwtcmF0aW9uIGFuZCBoYWxmL3F1YXJ0ZXIgcmF0aW9uIGFjdGl2aXRpZXMuIA0KDQo8YnI+DQoNCmBgYHtyfQ0KZnNsICU+JSANCiAgZmlsdGVyKHVuaXQgPT0gIlVTRCIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgZ3JvdXBfYnkodXNkX3RyYW5zZmVyX3ZhbHVlID0gcXVhbnRpdHkpICU+JSANCiAgc3VtbWFyaXNlKGZhbWlsaWVzID0gc3VtKGZhbWlsaWVzLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShgJV9iZW5lZmljaWFyaWVzYCA9IHJvdW5kKGJlbmVmaWNpYXJpZXMgLyBzdW0oYmVuZWZpY2lhcmllcykgKiAxMDAsIGRpZ2l0cyA9IDIpLCANCiAgICAgICAgIHVzZF90cmFuc2Zlcl92YWx1ZSA9IHBhc3RlMCgiJCIsIHVzZF90cmFuc2Zlcl92YWx1ZSkpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgc2V0X2NhcHRpb24oIlVTRCB0cmFuc2ZlciB2YWx1ZXMgZm9yIGFsbCBjYXNoLWJhc2VkIGFjdGl2aXRpZXMsIG5vdCBqdXN0IE1QQyIpICU+JSANCiAgZm9vdG5vdGUoaSA9IDEsIGogPSAzLCBwYXJ0ID0gImhlYWRlciIsIA0KICAgICAgICAgICBhc19wYXJhZ3JhcGgoIkRhdGEgZnJvbSB0aGUgRlNMIHRyYWNrZXIsIGFsbCBjYXNoIGFuZCBGU0wgYWN0dml0aWVzIGluY2x1ZGVkIikpICU+JSANCiAgZmxleHRhYmxlOjpzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjgpDQpgYGANCg0KDQo8YnI+PGJyPjxicj4NCg0KDQojIDUuIFVOSENSIHNpdGUgdHJhY2tlciAtLSBzZWFyY2hhYmxlIHRhYmxlDQoNCkRhdGEgZnJvbSBbVU5IQ1Igc2l0ZSB0cmFja2VyXShodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9zcHJlYWRzaGVldHMvZC8xRERCdklUZGc1bjRlQy1sM202V0VhTEU3MjkwZXo5aE0vZWRpdCNnaWQ9NTU0ODAxOTk5KS4gRXh0cmFjdGVkIDIwMjMwMzE1LiANCg0KYGBge3IgZHR9DQpzaXRlcyAlPiUgDQogIHNlbGVjdChnb3Zlcm5vcmF0ZSwgDQogICAgICAgICBkaXN0cmljdCwgDQogICAgICAgICBzdWJfZGlzdHJpY3QsIA0KICAgICAgICAgY29tbXVuaXR5LCANCiAgICAgICAgIHNpdGVfbmFtZSwgDQogICAgICAgICBsb25naXR1ZGVfeCwNCiAgICAgICAgIGxhdGl0dWRlX3ksIA0KICAgICAgICAgZmFtaWxpZXMsIA0KICAgICAgICAgaW5kaXZpZHVhbHMsIA0KICAgICAgICAgZm9jYWxfcG9pbnQgPSBvcmdhbml6YXRpb25fbmFtZSwgDQogICAgICAgICBmb2NhbF9jb250YWN0ID0gcGhvbmUpICU+JSANCiAgZGF0YXRhYmxlKG9wdGlvbnMgPSBsaXN0KHBhZ2VMZW5ndGggPSAxMCwgc2Nyb2xsWCA9IFRSVUUpLCANCiAgICAgICAgICAgIGZpbHRlciA9IGxpc3QocG9zaXRpb24gPSAidG9wIiwgY2xlYXIgPSBGQUxTRSksDQogICAgICAgICAgICBjYXB0aW9uID0gaHRtbHRvb2xzOjp0YWdzJGNhcHRpb24oc3R5bGUgPSAnY2FwdGlvbi1zaWRlOiB0b3A7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6MTIwJSA7JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWZlcmVuY2UgdGFibGUgLS0gQ29sbGVjdGl2ZSBzaXRlcywgbWFpbnRhaW5lZCBieSBVTkhDUiIpKSAlPiUgDQogIGZvcm1hdFN0eWxlKDAsIHRhcmdldCA9ICJyb3ciLCBsaW5lSGVpZ2h0ID0gIjgwJSIsIGZvbnRTaXplID0gIjgwJSIpDQogIA0KYGBgDQoNCg0KDQoNCg0K